//
//  main.c
//  Self-increasing and self-decreasing operations
//
//  Created by admin on 2019/7/8.
//  Copyright © 2019 猫爷爷的酱醋茶. All rights reserved.
//

#include <stdio.h>

/*
自增运算符的优先级比算术运算符的优先级高。
    1.自增运算符 ++
    2.自增表达式，都是将自身的值增加1；
      1）前自增表达式 ++num；
      2）后自增表达式 num++；
    3.后自增表达式的结果的计算方式，例：PostIncrement();
      先将自身的值取出来作为后自增表达式的结果，然后再将自身的值+1。
    4.前自增表达式的结果的计算方式，例：PreIncrement();
      先将自身的值+1，然后再将自身的值取出来作为表达式的结果。
 
 自减如是。
 
 运算符的结合性。
 当1个表达式中的优先级是一样的时候，是从左往右计算，还是从右往左计算，是根据运算符的结合方向决定的。
 比如： + - * / 是从左往右
       = += 赋值符号 是从右往左。
 */


//后自增表达式的结果计算方式
void PostIncrement(void);

//前自增表达式的结果计算方式
void PreIncrease(void);

//前后自增的复合计算
void CompoundIncrement(void);


int main(int argc, const char * argv[])
{
    CompoundIncrement();
    return 0;
}

//前后自增的复合计算
void CompoundIncrement(void)
{
    int i = 1;
    int j = 2;
    int num1 = i++ + ++j + i++;    // 1 + 3 + 2;
    printf("i = %d\n",i);
    printf("num1 = %d\n",num1);
    int num2 = i++ + ++i + i++ + ++i + i++; // 3 + 5 + 5 + 7 + 7;
    printf("i = %d\n",i);
    printf("num2 = %d\n",num2);
    
}

//前自增表达式的结果计算方式
void PreIncrease(void)
{
    int i = 1;
    int j = ++i;//结果是2;
    
    printf("i = %d\n",i);
    printf("j = %d\n",j);
}


//后自增表达式的结果计算方式
void PostIncrement(void)
{
    int i = 1;
    int j = i++;//结果是1；
    
    printf("i = %d\n",i);
    printf("j = %d\n",j);
}
